//维地(排布地盘)

//引用
 import Symbol from "./fixed/symbol";

 // 
  const initP = Symbol.initP;
const WeiDi = {
	/**  根据数据获取 对应的下标
	 *   @param   {Array} arr  数组
	 *   @param   {String} searchWord 查询的元素
	 * 	 @returns number -1时表示未找到，其他值表示对应数组的下标
	 */
	
	getRow: function getRow(arr, searchWord) {
		var row = arr.findIndex((value) => value === searchWord);
		return row;
	},
	/**
	 *  1、地盘干（排布奇仪）
	 *  	@param {String} jushu 局数
	 *  	@param {String} yinyangdun 阴遁或者阳遁
	 *  	@returns {object} 地盘干的数组   
	 */
	getdipangan: function getdipangan(jushu, yinyangdun) {
		//初始化地盘干
		let Ddry;
		//根据 '局数'  获取戊 的初始位置并排列出对应的地盘干
		if (yinyangdun == '阳遁') {
			
			Ddry = Symbol.yiqi.slice(10 - jushu).concat(Symbol.yiqi.slice(0, 10 - jushu));

		} else {
			
			Ddry = Symbol.yiqi.slice(0, jushu).reverse().concat(Symbol.yiqi.slice(jushu).reverse());

		}
		return Ddry;
	},
	
	/**
	 *  2、查询  "旬首"  在 '地盘干' 中的宫位
	 * 		@param {object} 地盘干
	 *      @param {String} 旬首
	 * 		@returns {number}  返回数字
	*/
   getXunshounum:function getXunshounum(Ddry,xunshou){
	   let num = this.getRow(Ddry, xunshou);
	   return num;
   },
   
   /**
   	 *  3、地盘九神
   	 * 		@param {String} yinyangdun 阴遁或者阳遁
   	 *      @param {number} num 旬首 在 '地盘干' 中的宫位
   	 * 		@returns {object} 返回Dgod
   	*/
   getJiushen:function getJiushen(yinyangdun,num){
   	   //初始化地盘九神
   	   let Dgod;
   	   //根据 '局数'  获取戊 的初始位置并排列出对应的地盘干
   	   if (yinyangdun == '阳遁') {
   	   	
   	   	Dgod = Symbol.Yanggod.slice(9 - num).concat(Symbol.Yanggod.slice(0, 9 - num));
   	   
   	   } else {
   	   	
   	   	Dgod = Symbol.Yingod.slice(0, num+1).reverse().concat(Symbol.Yingod.slice(num+1).reverse());
   	   
   	   }
   	   return Dgod;
   },
   
   /**
	* 4、地盘暗干支
	* 		@param {String} yinyangdun 阴遁或者阳遁
	* 		@param {object}  daterow ‘时柱’ 对应的 ‘六甲’ 
	* 		@param {number} num   旬首 在 '地盘干' 中的宫位
	* 		@returns {object} 
	*/
   getBganzhi:function getBganzhi(yinyangdun,daterow,num){
	   // 初始化地盘暗干支
	   let BDdry;
	   if (yinyangdun == '阳遁') {
		   
		   BDdry = daterow.slice(9 - num).concat(daterow.slice(0, 9 - num));
		   
	   }else{
		   
		   BDdry = daterow.slice(0, num+1).reverse().concat(daterow.slice(num+1).reverse());
		   
	   }
	   return BDdry;
   },
   
   /**
    *   找『值符』---星，『值使』---门
    *   「出自于『旬首宫』」
    *   「值符加时干，值使加时支」
    */
   getMenvoy : function getMenvoy(Xnum){
	   //值符使  根据局数获取原始的值符使
	   let Ysymbol = initP[Xnum][0];
	   let Ystarnum = this.getRow(Symbol.star,Ysymbol);
	   
	   //值使门
	   let Ymen = initP[Xnum][1];
	   let Ygatesnum =this.getRow(Symbol.gates,Ymen) ;
	   
	   // 输出数据：
	   return {Ysymbol,Ymen,Ystarnum,Ygatesnum};
   },
   
   //  『暗使』
   getAenvoy : function getAenvoy(Xnum){
	   let BDmen = initP[8-Xnum][1];
	   let BDgatesnum =this.getRow(Symbol.gates,BDmen);
	   // 输出数据：
	   return {BDmen,BDgatesnum};
   },
   
   getWeiDi:function getWeiDi(Jnum,Yinyang,Xshou,SXshou){
	   // 1、排布奇仪(涉及元素：『阴阳遁』『局数』):
			const DQiyi = this.getdipangan(Jnum,Yinyang);
			
			// 『旬首』在 『地盘干』 的 宫位
			const Xnum = this.getXunshounum(DQiyi,Xshou);
	   
	   // 2、排布地盘九神(涉及元素：『旬首』):
			const DGod = this.getJiushen(Yinyang,Xnum);
		
	   // 3、排布地盘暗干支(涉及元素：『阴阳遁』、『时柱六甲旬』、『旬首宫』):
			const DGanZhi = this.getBganzhi(Yinyang,SXshou,Xnum);
	   
	   // 4、『明使』
			const Menvoy = this.getMenvoy(Xnum);
			
	   // 5、『暗使』
			const Aenvoy = this.getAenvoy(Xnum);
			
	   //输出数据：
		const json = {"DQiyi":DQiyi,
					  "DGod":DGod,
					  "DGanZhi":DGanZhi,
					  "Menvoy":Menvoy,
					  "Aenvoy":Aenvoy,
					  "Xnum":Xnum
					}
		return json;
   }
};
export default WeiDi;